/**
 * 
 */
package springdata_CrudRepository.service.impl;

import java.util.Optional;

import javax.annotation.Resource;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.stereotype.Service;

import springdata_CrudRepository.domain.User;
import springdata_CrudRepository.repository.UserRepository;
import springdata_CrudRepository.service.UserService;

/**
 * @author 罗老师【Long】
 * Version:1.0
 * 备注：本套课程提供全部源码+笔记+相关开发工具+答疑服务
 */
@Service
public class UserServiceImpl implements UserService{

	@Resource
	private UserRepository userRepository;
	/* 
	 * 添加用户信息
	 */
	@Override
	public void add(User user) {
		// TODO Auto-generated method stub
		userRepository.save(user);
	}
	
	/* 
	 * 查询所有的用户信息
	 */
	@Override
	public Iterable<User> findAll() {
		// TODO Auto-generated method stub
		return userRepository.findAll();
	}

	/* 
	 * 删除用户信息
	 */
	@Override
	public void delete(Integer id) {
		// TODO Auto-generated method stub
		userRepository.deleteById(id);
	}

	/* 
	 * 根据用户id获取需要修改的用户的信息
	 */
	@Override
	public User findById(Integer id) {
		// TODO Auto-generated method stub
		Optional<User> op = userRepository.findById(id);
		return op.get();
	}

	/* 
	 * 修改用户信息
	 */
	@Override
	public void modify(User user) {
		// TODO Auto-generated method stub
		//CrudRepository的save方法，如果传进来的实体有id，则会进行update操作
		userRepository.save(user);
	}

	/* 
	 * 查询所有数据并进行排序
	 */
	@Override
	public Iterable<User> findAllSort() {
		// TODO Auto-generated method stub
		//根据age字段进行升序
		//Sort sort = Sort.by(Direction.ASC,"age");
		//根据id进行降序
		Sort sort = Sort.by(Direction.DESC,"id");
		
		Iterable<User> users = userRepository.findAll(sort);
		
		return users;
	}

	/* 
	 * //进行分页查询
	 */
	@Override
	public Page<User> findUserByPage(int pageIndex) {
		// TODO Auto-generated method stub
		/*
		 * PageRequest.of（当前页码，每页显示的记录数）
		 * 
		 * 0表示第一页
		 * 
		 * */
		
		Pageable pageable =  PageRequest.of(pageIndex, 2);
		Page<User> users = userRepository.findAll(pageable);
		return users;
	}

}
